문제

The Arara are an isolated tribe found in the Amazon who count in pairs. For example one to eight is as follows:

1 = anane 2 = adak 3 = adak anane 4 = adak adak 5 = adak adak anane 6 = adak adak adak 7 = adak adak adak anane 8 = adak adak adak adak

Take a given number and return the Arara’s equivalent.

e.g.

countArara(3) ‘adak anane’

countArara(8) ‘adak adak adak adak’

문제를 맨 처음 보고 생각한 건 재귀함수를 사용할 수 있을 거 같다는 생각이었다.
종료조건은 1/2로 두고, 2의 배수가 아니면 anane를 호출하고, 2의 배수면 adak를 호출하는 식으로 작업을 했다.

나의 답

function countArara(n) {
    if(n === 1) return "anane";
    if(n === 2) return "adak";
 
    if(n % 2 === 0) {
      return countArara(n-2) + ' adak';
    } else {
      return countArara(n-1) + ' anane';
    }
}

아쉬웠던 건 초기조건을 제거하지 못한 것이다. 1 / 2 인 경우에 행하는 종료조건도 제거하고 싶었으나, 마음대로 되지 않았다.

Best Solution

function countArara(n) {
  switch (n) {
    case 0:  return '';
    case 1:  return 'anane';
    case 2:  return 'adak';
    default: return 'adak ' + countArara(n-2);
  }
}

스위치-케이스문을 사용하면 좀 더 깔끔하게 조건을 처리할 수 있었을 거 같다. 이 분은 나랑 반대로 앞에서부터 재귀를 돌렸는데 이렇게 하는게 좀 더 깔끔해 보인다